#46、定义一个名为American的类及其子类NewYorker.    使用ParentClass赖定义子类
class American(object):
    pass
class NewYorker(American):
    pass
anAmercian = American()
aNewYorker = NewYorker()
print('46、')
print(anAmercian)
print(aNewYorker)
print('======================================================================')
print('\n')


#47、定义一个名为Circle的类，可以用半径来构造。Circle类有一个可以计算面积的方法。
import math

class Circle(object):
    def __init__(self,r):
        self.radius = r
    def area(self):
        return self.radius**2*math.pi
aCircle = Circle(2)
print('47、')
print(aCircle.area())
print('======================================================================')
print('\n')


#48、定义一个名为Rectangle的类，它可以由长度和宽度构造。矩形类有一个方法可以计算面积。
class Rectangle(object):
    def __init__(self,l,w):
        self.length = l
        self.width  = w
    def area(self):
        return self.length*self.width
at=Rectangle(2,10)
at1=Rectangle(6,10)
print('48、')
print(at.area())
print(at1.area())
print('======================================================================')
print('\n')


#49、定义一个名为Shape的类及其子类Square。Square类有一个init函数，它以长度作为参数。这两个类
#都有一个area函数，可以打印形状的区域，形状的区域默认为0。
class Shape(object):
    def __init__(self):
        pass
    def area(self):
        return 0
class Square(Shape):
    def __init__(self,l):
        Shape.__init__(self)
        self.length = l
    def area(self):
        return self.length*self.length
aSquare = Square(3)
print('49、')
print(aSquare.area())
print('======================================================================')
print('\n')


#50、请引发RuntimeError异常。
print('50、')
'''raise RuntimeError('something wrong')'''

print('======================================================================')
print('\n')

#51、编写一个函数来计算5/0，并使用try/except来捕捉异常。
print('51、')
def throws():
    return 5/0
try:
    throws()
except ZeroDivisionError:
    print('Division by zero')
except ExceptionError:
    print('Caught an exception')
finally:
    print('In finally block for cleanup')
print('======================================================================')
print('\n')


#52、定义一个自定义异常类，它将字符串消息作为属性。
class MyError(Exception):
    def __init__(self,msg):
        self.msg=msg
print('52、')
erro=MyError('Something wrong.')
print('======================================================================')
print('\n')


#53、假设我们有一些username@companyname.com格式的电子邮件地址，请编写程序打印给定电子邮件地址
#的用户名，用户名和公司名都只由字母组成。
#示例：如果下面的电子邮件地址作为程序的输入：john@google.com
#那么程序的输出应该是：john,在向问题提供输入数据的情况下，应该假定它是控台输入。
import re
print('53、请输入一个邮箱地址：')
emailaddress=input()
pat2='(\w+)@((\w+\.)+(com))'      #正则表达式
r2=re.match(pat2,emailaddress)
print(r2.group(1))
print('======================================================================')
print('\n')


#54、假设我们有一些username@companyname.com格式的电子邮件地址，请编写程序打印给定电子邮件地址
#的用户名，用户名和公司名都只由字母组成。
#示例：如果下面的电子邮件地址作为程序的输入：john@google.com
#那么程序的输出应该是：google,在向问题提供输入数据的情况下，应该假定它是控台输入。
import re
print('54、请输入一个邮箱地址：')
emailaddress=input()
pat2='(\w+)@((\w+\.)+(com))'      #正则表达式
r2=re.match(pat2,emailaddress)
print(r2.group(2))
print('======================================================================')
print('\n')


#55、编写一个程序，接收一个由空格分隔的单词序列作为输入，打印只由数字组成的单词。
#示例：如果下面的额单词作为程序的输入：2 cats and 3 dogs;
#那么，程序的输出应该是：['2','3']
#在向问题提供输入数据的情况下，应该假定它是控制台输入。
import re
print('55、请输入一些数字和单词：')
s = input()
print(re.findall('\d',s))       #正则表达式(提取单个数字)
print('======================================================================')
print('\n')


#56、打印unicode字符串“hello world”。
ui=u'hello world'       #u是unicode的用法
print('56、')
print(ui)
print('======================================================================')
print('\n')


#57、python中的解码与编码
s='图灵python'
enc=s.encode('utf-8')      #解码
dec=enc.decode('utf-8')    #编码
print('57、')
print(enc)
print(dec)
print('======================================================================')
print('\n')


#58、编写一个特殊注释来表明Python源代码文件是unicode格式的。
# -*- coding: utf-8 -*-
# -----------------------#
'''#########################'''
print('58、')
print('======================================================================')
print('\n')


#59、写一个程序来计算1/2+2/3+3/4+……+n/n+1
#示例：如果下面的n作为程序的输入：5，那么输出应该是3.55
print('59、请输入一个10以内的整数：')
n=int(input())
sum1=0.0
for i in range(1,n+1):
    sum1 += float(float(i)/(i+1))
print(round(sum1,2))
print('======================================================================')
print('\n')


#60、编写程序计算：当n>0和F(0)=1时，F(n)=F(n-1)+100通过控制台输入一个给定的n(n>0)
#示例：如果下面的n作为程序的输入：5
#那么程序输出应该是:500。
def f(n):
    if n==0:
        return 0
    else:
        return f(n-1)+100       #此处定义的是一个递归函数
print('60、请输入一个10以内的整数：')
n=int(input())
print(f(n))
print('======================================================================')
print('\n')


#61、问题：斐波那契数列的计算公式如下：如果n=0，,f(n)=0;如果n=1，f(n)=1;
#如果n>1，f(n)=f(n-1)+f(n-2);请编写一个程序，在控制台输入给定n的情况下计算
#f(n)的值。
#示例：如果n作为程序输入：7
#那么程序输出应该是：13
def f(n):
    if n==0:
        return 0
    elif n==1:
        return 1
    else:
        return f(n-1)+f(n-2)
print('61、请输入一个10以内的整数：')
n = int(input())
print(f(n)) #斐波那契数列第一、二项分别是0和1，从第三项开始每一项是前两项的和。
print('======================================================================')
print('\n')
        

#62、问题：使用generator编写一个程序，当n由控制台输入时，以逗号分隔的形式输出
#0和n之间的偶数；
#示例：如果下面的n作为程序输入：10
#程序输出应该是：0,2,4,6,8,10
def EvenGenerator(n):
    i = 0
    while i <= n:
        if i%2==0:
            yield i
        i += 1
print('62、请输入一个18以内的整数：')
n = int(input())
values = []
for i in EvenGenerator(n):
    values.append(str(i))
print(','.join(values))
print('======================================================================')
